﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using VideoLink.Utility;

namespace FileLink.FilesInfo
{
    /// <summary>
    /// Представляет фрагмент файла.
    /// Файл передаётся по фрагментам, 
    /// длина которых не превышает некоторого заданного значения.
    /// </summary>
    [Serializable]
    public class FileFragment
    {
        #region Public properties
        
        /// <summary>
        /// Максимальная длина одного фрагмента в байтах
        /// </summary>
        public const long MaxFragmentLength = 10 * 1024 * 1024;

        /// <summary>
        /// Уникальный ID файла.
        /// Уникален среди всех (принимаемых и передаваемых) файлов.
        /// </summary>
        public Guid ID { get; private set; }
        
        /// <summary>
        /// Порядковый номер данного фрагмента в файле.
        /// Нумерация начинается с нуля.
        /// </summary>
        public int SequenceNumber { get; private set; }
        
        /// <summary>
        /// Фрагмент исходного файла
        /// </summary>
        public byte[] Data { get; private set; }

        #endregion

        /// <summary>
        /// Создать экземпляр класса по умолчанию
        /// </summary>
        public FileFragment()
        {
            Data = new byte[0];
        }

        /// <summary>
        /// Создать экземпляр класса с указанными параметрами.
        /// </summary>
        /// <param name="id">
        /// Уникальный ID файла.
        /// Уникален среди всех (принимаемых и передаваемых) файлов.
        /// </param>
        /// <param name="seqNum">
        /// Порядковый номер данного фрагмента в файле.
        /// Нумерация начинается с нуля.
        /// </param>
        /// <param name="data">
        /// Фрагмент исходного файла
        /// </param>
        public FileFragment(Guid id, int seqNum, byte[] data)
        {
            ID = id;
            SequenceNumber = seqNum;
            Data = data;
        }
    }
}
